home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tiger Disk 6
/
Tiger_Disk_006_19xx_Tiger-Crew-Disk_de_Side_B.d64
/
13 mk
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2023-02-26
|
7KB
|
181 lines
10 u$="[197][197][197][197][197][197][197][197][197][197]":o$="[164][164][164][164][164][164][164][164][164]":i$="input-routine":b$=" bildschirm"
20 v$=" verzoegerung":s$="schleife"
101 data 169,16,141,75,232,169,15,141,74,232,169,128,141,72,232,32,83,3
102 data 169,0,141,75,232,96,96,160,0,162,0,202,208,253,136,208,248,96
103 data 169,16,141,75,232,169,15,141,74,232,169,0,133,1,165,1,141,72,232,160
104 data 1,32,128,3,230,1,208,242,169,0,141,75,232,96,162,64,202,208,253,96
200 print"[147][164][164][164]";o$;o$;o$;o$:print"syntax-lehrgang 'maschinensprache' (13)
210 [153]"tototototototo";o$:[153]"4. zeit"s$"n
220 print"gelegentlich steht man vor dem problem,
230 [153]"ein programm fuer eine bestimmte zeit
240 print"verzoegern zu muessen. in basic fuegt
250 [153]"man im allgemeinen eine warte"s$
260 [153]"ein. wie warte"s$"n in maschinen-
270 print"programmen ausgefuehrt werden und wie
280 [153]"man ihre zeitliche dauer berechnet,wol-
290 print"len wir uns im folgenden ansehen.
300 [140]:[129]i[178]0[164]75:[135]x:[151]826[170]i,x:[130]
310 i[178]1:[141]5000:[139]fl[167]200
400 [153]"load"o$;o$;o$"toto"
410 [153]"4.1 kurze"v$"szeitenwait
420 print"sehen wir uns gleich ein beispiel an:
430 [153]" ldx #$00 (2)
440 print" [176][192]dex (2)
450 [153]" on(NULL)cmd/_bne $fd (3)
460 print" rts (6)
470 [153]"die zahlen in klammern hinterclose den be-
480 print"fehlen geben an, wie viele taktzyklen
490 [153]"der befehl benoetigt. bei einer takt-
500 print"frequenz von 1 mhz dauert jeder takt
510 [153]"eine mikrosekunde.
520 i=2:gosub5000:ifflthen200
600 print"[147]man sieht leicht, dass hier eine pro-
610 [153]"gramm"s$" ausgefuehrt wird.man wird
620 print"ebenfalls sofort verstehen, dass die
630 [153]"ausfuehrung einer solchen programm-
640 prints$" eine gewisse zeit benoetigt.
650 [153]"in dieser "s$" passiert nichts
660 print"anderes, als dass das xr bis $00 dekre-
670 [153]"mentiert wird. der startwert ist (hier)
680 print"ebenfalls $00, also wird die "s$
690 print"genau 256 mal durchlaufen.
720 i[178]3:[141]5000:[139]fl[167]400
800 [153]"loadjeder "s$"ndurchlauf dauert genau
810 print"2 + 3 = 5 taktzyklen. wenn die "s$
820 print"256 mal durchlaufen wird, so dauert das
830 [153]"also: 256 * 5 = 1280 taktzyklen. hinzu
840 print"kommen noch etwa 10 zyklen fuer die an-
850 [153]"deren befehle, insgesamt dauert diese
860 prints$" also ca 1290 zyklen. das sind
870 [153]"1290 mikrosekunden bzw. 1.29 millisec.
880 print"waehlt man als startwert fuer das xr
890 [153]"nicht $00, sondern einen anderen wert,
900 print"so wird die zeit entsprechend kuerzer.
930 i[178]4:[141]5000:[139]fl[167]600
1000 [153]"loadmit welchem startwert erreicht man bei-
1010 print"spielsweise eine"v$"szeit von
1020 [153]"1.0 msec ?
1030 print"loesung: 1 msec = 1000 mikrosec.
1040 [153]"hiervon ziehen wir fuer die befehle
1050 print"ausserhalb der "s$" ca 10 ab (=990)
1060 [153]"und teilen durch die zeit, die fuer je-
1070 print"den "s$"ndurchlauf benoetigt wird:
1080 [153]"990/5 = 198. dies ist die zahl der be-
1090 print"noetigten "s$"ndurchlaeufe fuer die
1100 [153]"gewuenschte"v$" von 1 msec.
1130 i=5:gosub5000:ifflthen800
1200 print"[147]der startwert fuer das xr ist also 198
1210 [153]"oder hexadezimal $c6.
1220 print""o$;o$;o$"[164][164]
1230 [153]"4.2 lange"v$"szeiten
1240 print"oft reicht eine"v$"szeit von
1250 [153]"nur maximal 1.3 msec nicht aus. in sol-
1260 print"chen faellen wenden wir verschachtelte
1270 [153]s$"n an. wir betten unsere verzoe-
1280 print"gerungs"s$" also in eine zweite
1290 [153]s$" ein. das sieht beispielsweise
1300 print"so aus:
1320 i[178]6:[141]5000:[139]fl[167]1000
1400 [153]"load ldy #$00 (2)
1410 print" [176][192][192]ldx #$00 (2)
1420 [153]" (NULL)cmd(NULL)ortandex (2) > (2+3)*256=1280on
1430 print" [221][221][157][157][221][173]_bne $fd (3)
1440 [153]" (NULL)cmd(NULL) dey (2)
1450 print" [221][157][173][192]_bne $f8 (3)
1460 [153]" rts (6)
1470 print"wie lange dauert diese "s$" ?
1480 [153]"loesung: die aeussere "s$" wird 256
1490 print"mal durchlaufen. jeder durchlauf dauert
1500 [153]"2 + 1280 + 2 + 3 = 1287 zyklen.
1530 i=7:gosub5000:ifflthen1200
1600 print"[147]die gesamtdauer ist also:
1610 [153]"2 + 1287 * 256 + 6 = 329480 taktzyklen.
1620 print"das sind immerhin schon 0.33 sec ! baut
1630 [153]"man diese routine als unterprogramm in
1640 print"ein maschinenprogramm ein, so kann man
1650 [153]"durch dreimaliges aufrufen also verzoe-
1660 print"gerungszeiten von 1 sec erreichen.
1670 [153]"im naechsten abschnitt lernen wir eine
1680 print"moegliche anwendung kennen.
1710 i[178]8:[141]5000:[139]fl[167]1400
1800 [153]"load"o$;o$
1810 [153]"5. tonausgang cb2
1820 print"aus basic-programmen ist ihnen sicher
1830 [153]"bekannt, dass ueber den ausgang cb2 des
1840 print"userports toene erzeugt werden koennen.
1850 [153]"in basic macht man das folgendermassen:
1860 print"1. poke 59467,16:rem cb2 einschalten
1870 [153]"2. poke 59466,15:rem signalform waehlen
1880 print"3. poke 59464,..:rem frequenz (0-255)
1890 [153]"4. ... warte"s$" (for ... next)
1900 print"5. poke 59467,0: rem cb2 ausschalten
1930 i[178]9:[141]5000:[139]fl[167]1600
2000 [153]"loaddas setzen wir einfach in maschinen-
2005 x$="[192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192]"
2010 print"sprache um:":printx$
2020 print" lda #$10 (= dez. 16)
2040 [153]"1. < sta $e84b (= dez. 59467)":[153]x$
2050 [153]" lda #$0f (= dez. 15)
2055 print"2. < sta $e84a (= dez. 59466)":printx$
2060 print" lda #$80 (= dez. 128)
2065 [153]"3. < sta $e848 (= dez. 59464)":[153]x$
2070 [153]"4. jsr $.... (verzoegerungs"s$")":[153]x$
2080 [153]" lda #$00 (= dez. 0)
2090 print"5. < sta $e84b (= dez. 59467)":printx$
2100 print" rts
2130 i[178]10:[141]5000:[139]fl[167]1800
2200 [153]"loaddie"v$" soll 0.33 sec sein.
2210 print"das programm steht im ram ab 826. hier
2220 [153]"eine demonstration:"[163]31)"totototototo
2230 print tab(30)"<return[146]>
2240 [161]x$:[139]x$[179][177][199](13)[167]2240
2250 [158]826
2260 [153]"nochmal (j/n) ?"
2270 [161]x$:[139]x$[178]""[167]2270
2280 [139]x$[178]"j" [167][153]"on ononon":[137]2250
2290 [139]x$[179][177]"n"[167]2270
2300 [153]"nun wollen wir das programm aendern.
2310 print"es soll einen ton erzeugen, dessen fre-
2320 [153]"quenz den ganzen moeglichen bereich
2330 print"ueberstreicht. die ersten vier befehle
2340 [153]"bleiben unveraendert.
2350 i=11:gosub5000:ifflthen2000
2400 print"[147] lda #$00
2410 [153]" sta $01 (zwischenspeicher)
2415 print" lda $01 (zwischenspeicher)
2416 [153]" sta $e848 (= dez. 59464)
2420 print" [176][192]jsr $.... ("v$"s"s$")
2430 [153]" on(NULL)cmd(NULL) inc $01 (zwischenspeicher)
2440 print" [145][221][157][173]_bne $f8
2445 [153]"der inhalt von 59464 (frequenz) wird
2450 print"256 mal um 1 erhoeht. wir waehlen dies-
2460 [153]"mal eine kuerzere"v$".
2510 i=12:gosub5000:ifflthen2200
2600 print"[147]auch hierfuer eine demonstration,aller-
2610 [153]"dings rufen wir die routine gleich 5
2620 print"mal hintereinander auf:
2630 [153][163]31)"ontotototototo":[153][163]30)"<returnwait>
2640 getx$:ifx$<>chr$(13)then2640
2650 fori=1to5:sys 862:next
2660 print"nochmal (j/n) ?"
2670 getx$:ifx$=""then2670
2680 ifx$="j" thenprint"[145] [145][145]":goto2650
2690 ifx$<>"n"then2670
2691 print"aufgaben:
2692 [153]"1. wie lange dauert die suchroutine aus
2694 print"der letzten lektion ?
2696 [153]"2. probieren sie, das zwischenspeichern
2698 print"im letzten beispiel in die cpu zu ver-
2700 [153]"lagern (tip: yr, aber vorsicht mit der
2702 print"warte"s$"!)
2710 [153]"- seite 13 - <+> ontotototocmdcmdcmdcmdendewait <-> von vorne";
3060 [141]5020:[145]fl[137]0
3070 [153]"load":[128]
5000 [143] umblaettern
5010 [153]" - seite";i;"- <+> weiter <-> zurueck";
5020 [129]i[178]0[164]11:[161]x$:[130]
5030 [161]x$:[139]x$[178]""[167]5030
5040 [139]x$[178]"+"[167]fl[178]0:[142]
5050 [139]x$[178]"-"[167]fl[178]1:[142]
5060 [137]5030